home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / TCL1 / __MANDEL / MANDELBR / CMANDELV.C < prev    next >
Text File  |  1992-03-28  |  1KB  |  70 lines

  1. //    CMandelVLinePhase.c
  2.  
  3. #include "CMandelVLinePhase.h"
  4.  
  5. extern long    gTickLimit;
  6.  
  7. CMandelPhase *
  8. CMandelVLinePhase::Perform(void)
  9. {
  10.     asm
  11.     {
  12.         movem.l        d3/a3,-(sp)
  13.         fmovem        fp4-fp7,-(sp)
  14.         
  15.         move.l        (this),a3
  16.         fmove.x        CMandelVLinePhase.itsScale(a3),fp0
  17.         move.w        CMandelVLinePhase.itsMaxDwell(a3),d2
  18.         
  19.         fmove.x        CMandelVLinePhase.itsHStart(a3),fp6
  20.         fmove.x        CMandelVLinePhase.itsVStart(a3),fp7
  21.         
  22.         move.w        CMandelVLinePhase.itsLength(a3),d1
  23.         move.l        CMandelVLinePhase.itsRowSize(a3),d3
  24.         move.l        CMandelVLinePhase.itsDwellsH(a3),a1
  25.         move.l        (a1),a0
  26.         adda.l        CMandelVLinePhase.itsIndex(a3),a0
  27.     @0:
  28.         move.l        Ticks,d0
  29.         cmp.l        gTickLimit,d0
  30.         bgt            @4
  31.         
  32.         move.w        d2,d0
  33.         fmove.x        fp6,fp2            ; Z.a = Z0.a
  34.         fmove.x        fp7,fp5            ; Z.b = Z0.b
  35.         bra            @2
  36.     @1:
  37.         fsub.x        fp3,fp2
  38.         fmul.x        fp4,fp5
  39.         fscale.x    #1.0,fp5
  40.         fadd.x        fp6,fp2            ; ZZ.a += Z0.a
  41.         fadd.x        fp7,fp5            ; ZZ.b += Z0.b
  42.     @2:
  43.         fmove.x        fp2,fp4            ; Z = ZZ
  44.         fmul.x        fp4,fp2            ; temp = ZZ.a * ZZ.a + ZZ.b * ZZ.b
  45.         fmove.x        fp5,fp3
  46.         fmul.x        fp5,fp3
  47.         fmove.x        fp2,fp1
  48.         fadd.x        fp3,fp1
  49.         fcmp.x        #4.0,fp1
  50.         fbgt        @3
  51.         dbra        d0,@1
  52.     @3:
  53.         move.w        d0,(a0)
  54.         adda.l        d3,a0
  55.         fsub.x        fp0,fp7
  56.         dbra        d1,@0
  57.         move.l        CMandelVLinePhase.itsNextPhase(a3),d0
  58.         bra            @5
  59.     @4:
  60.         fmove.x        fp7,CMandelVLinePhase.itsVStart(a3)
  61.         move.w        d1,CMandelVLinePhase.itsLength(a3)
  62.         suba.l        (a1),a0
  63.         move.l        a0,CMandelVLinePhase.itsIndex(a3)
  64.         clr.l        d0
  65.     @5:
  66.         fmovem        (sp)+,fp4-fp7
  67.         movem.l        (sp)+,d3/a3
  68.     }
  69. }
  70.